package vue.graphique;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Scanner;

import javax.swing.JPanel;

import modele.Ressources;

import controleur.Controleur;
import controleur.ControleurCoordonnee;


public class VuePlateau extends JPanel implements MouseListener {
	private static final long serialVersionUID = 2844210553879635357L;
	// Variable(s) d'instance
	private String plateau = null;
	private String uniteSelectionnee = null;
		
	// Constructeur(s)
	public VuePlateau () {
		super();
			
		this.setPreferredSize(new Dimension(Ressources.WIDTH_PLATEAU, Ressources.HEIGHT_PLATEAU));
		this.addMouseListener(this);
	}
		
	// Methode(s)
	public void paintComponent(Graphics g) {
		// Construit la representation graphique du plateau
		g.clearRect(0, 0, 700, 700);
		Scanner sc = null;
		String valeurCase;
		if(plateau != null) {
			sc = new Scanner(this.plateau);
		}
		g.setFont(new Font("test", Font.BOLD, 20));
		for(int i = 0; i < Ressources.TAILLE_CASE*Ressources.NOMBRE_DE_LIGNES; i+=Ressources.TAILLE_CASE) {
			for(int j = 0; j < Ressources.TAILLE_CASE*Ressources.NOMBRE_DE_COLONNES; j+=Ressources.TAILLE_CASE) {
				if(sc != null && sc.hasNext()) {
					valeurCase=sc.next();
					g.drawRect(j, i, Ressources.TAILLE_CASE, Ressources.TAILLE_CASE);
					if(this.uniteSelectionnee != null && valeurCase.equals(this.uniteSelectionnee)) {
						g.setColor(Color.RED);
						g.fillOval(j, i, Ressources.TAILLE_CASE, Ressources.TAILLE_CASE);
						g.setColor(Color.BLACK);
					} else {
						if(valeurCase.equals("X")) {
							g.fillRect(j, i, Ressources.TAILLE_CASE, Ressources.TAILLE_CASE);
						} else {
							if(valeurCase.equals("O")) {
								g.drawRect(j, i, Ressources.TAILLE_CASE, Ressources.TAILLE_CASE);
							} else {
								if(valeurCase.charAt(0)=='a') {
									g.drawOval(j, i, Ressources.TAILLE_CASE, Ressources.TAILLE_CASE);
									g.drawString(""+valeurCase.charAt(1), j+(Ressources.TAILLE_CASE/2), i+(Ressources.TAILLE_CASE/2));
								} else {
									g.fillOval(j, i, Ressources.TAILLE_CASE, Ressources.TAILLE_CASE);
									g.setColor(Color.WHITE);
									g.drawString(valeurCase, j+(Ressources.TAILLE_CASE/2), i+(Ressources.TAILLE_CASE/2));
									g.setColor(Color.BLACK);
								}
							}
						}
					}
				} else {
					g.drawRect(j, i, Ressources.TAILLE_CASE, Ressources.TAILLE_CASE);
				}
			}
		}
	}
	
	public void dessinerPlateau(String plateau) {
		this.plateau=plateau;
		this.repaint();
	}
	
	public void setUniteSelectionnee(String unite) {
		this.uniteSelectionnee=unite;
		this.repaint();
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		Controleur.getInstance().notification(new ControleurCoordonnee(e.getX(), e.getY()));
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
}
